动态创建工具栏图标、图标命令按钮及添加响应函数。图标命令按钮相对来说要简单一些,工具栏图标需要通过函数创建imagelist、toolbar。而图标命令按钮则只需要创建添加命令按钮,然后与图标关联即可。

对话框程序利用工具栏资源设计的工具栏,工具栏按钮只能显示256色图像,而不能显示真彩色图像,并且工具栏按钮不能显示文本,为此,需要动态创建工具栏;

1 动态创建

2 能有工具提示;

3 可以函数响应

流程

1 首先建立一个对话框程序

2 新建或引入3个位图,作为图标显示;

3 声明、定义、调用

1 recordsDlg.h

1.1 图标声明

CToolBar m_ToolBar;

CImageList m_ImageList;

CString m_TipText;

CBitmap m_bitmap1;

CBitmap m_bitmap2;

CBitmap m_bitmap3;

...

1.2 图标函数声明

//}}AFX_MSG

afx_msg void OnICON1();

afx_msg void OnICON2();

afx_msg void OnICON3();

afx_msg BOOL OnToolTipNotify(UINT id,NMHDR * pNMHDR, LRESULT * pResult);

***

2 recordsDlg.cpp

2.1 函数与图标映射

//}}AFX_MSG_MAP

ON_COMMAND(8001, OnICON1)

ON_COMMAND(8002, OnICON2)

ON_COMMAND(8003, OnICON3)

ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)

2.2 图标绘制

(图标命令按钮只需添加命令按钮、并将按钮属性更改为“所有者绘制”、“位图”即可。)

BOOL CRecordsDlg::OnInitDialog()

{

CDialog::OnInitDialog();

//工具栏(按钮+图标+工具提示+函数响应)

m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,1,1);

UINT array[16];

for(int i = 0 ; i < 16; i++)

{

if(i==3 || i==7 || i ==11 || i ==15)

{

array[i] = ID_SEPARATOR;

}

else

{

array[i] = i + 8001;

}

}

m_ToolBar.CreateEx(this); //Create改成CreateEx可以扁平化显示按钮,图标不变,分隔条在扁平化时才显示;
m_ToolBar.SetButtons(array,16);

2.2 图标提示

m_ToolBar.SetButtonText(0,"可编辑对话框");
m_ToolBar.SetButtonText(1,"对话框输入应用");
m_ToolBar.SetButtonText(2,"win32控制台应用程序");

2.3 将图片文件装入图标

m_bitmap1.LoadBitmap(IDI_ICON1);

m_bitmap2.LoadBitmap(IDI_ICON2);

m_bitmap3.LoadBitmap(IDI_ICON3);

//m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,1,1);

m_ImageList.Add(&m_bitmap1, RGB(0, 0, 0));

m_ImageList.Add(&m_bitmap2, RGB(0, 0, 0));

m_ImageList.Add(&m_bitmap3, RGB(0, 0, 0));

m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);

2.4 函数定义

void CRecordsDlg::OnICON1()

{

Dlg1 dlg; //创建Dlg1类对象dlg;

if(!dlg.DoModal()) //调用dlg对象的DoModal函数创建模式对话框;

{

return ;

}

 

3 图片文件关联

3.1 将16*16的bmp的图标文件放入res文件夹中,图标文件必须是bmp的,可以用PS转换,背景设置为#f0f0f0;

3.2 在资源视图的bitmap处右击,插入→bitmap→引入→文件类型:全部→文件位置。;

ref1

ref2